package com.senlingspace.system.domain.vo;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 微信小程序端订单详情VO
 *
 * @author lebronjames
 * @date 2024/09/30
 */
@Data
public class MiniAppOrderDetailVo implements Serializable {
    /**
     * 主键
     */
    private Long orderId;

    /**
     * 订单编号
     */
    private String orderNumber;

    /**
     * 门店名称
     */
    private String shopName;

    /**
     * 门店地址
     */
    private String shopAddress;

    /**
     * 订单来源（10=门店，20=抖音，30=美团，40=小程序）
     */
    private Integer source;

    /**
     * 订单类型：101=门票、102=商品、103=门票+商品
     */
    private Integer orderType;

    /**
     * 票类订单业务状态：
     * <p>
     * 用户小程序中，只展示：待核销（UNREDEEMED）、已退款（REFUNDED）、已完成（COMPLETED）
     * <p>
     * 待核销（UNREDEEMED）、
     * 已核销（REDEEMED）、
     * 待支付（PENDING_PAYMENT）、
     * 订单取消（ORDER_CANCELLED）、
     * 已退款（REFUNDED）、
     * 已领手环（WRISTBAND_RECEIVED）、
     * 已领设备（DEVICE_RECEIVED）、
     * 已完成（COMPLETED）
     */
    private String businessStatus;

    /**
     * 商品订单业务状态：（仅用于orderType=102）
     * <p>
     * 待支付（PENDING_PAYMENT）、
     * 已完成（COMPLETED）、
     * 待取货（WAITING_FOR_PICKUP）、
     * 待发货（WAITING_FOR_SHIPPING）、
     * 已发货（SHIPPED）、
     * 订单取消（ORDER_CANCELLED）
     */
    private String goodsStatus;

    /**
     * 核销码
     */
    private String verifyCode;

    /**
     * 订单金额（元）
     */
    private String totalAmount;

    /**
     * 下单时间
     */
    private String createTime;

    /**
     * 支付时间
     */
    private String paymentTime;

    /**
     * 购买手机号
     */
    private String buyPhone;

    /**
     * 票信息
     */
    private Ticket ticket;

    /**
     * 商品信息
     */
    private Goods goods;

    /**
     * 核销时间
     */
    private String verifyTime;

    @Data
    public static class Ticket implements Serializable {

        /**
         * 封面
         */
        private String cover;

        /**
         * 项目名称
         */
        private String projectName;

        /**
         * 票类名称
         */
        private String categoryName;

        /**
         * 说明
         */
        private String remark;

        /**
         * 展期
         * <p>
         * index 0 = 开始时间
         * index 1 = 结束时间
         */
        private List<String> cycleTimes;

        /**
         * 购买数量
         */
        private int buyCount;
    }

    @Data
    public static class Goods implements Serializable {

        /**
         * 商品信息
         */
        private List<Item> items;

        /**
         * 收件人地址
         */
        private String receiverAddress = "";

        /**
         * 收件人
         */
        private String receiverName = "";

        /**
         * 收件人电话
         */
        private String receiverPhone = "";
    }

    @Data
    public static class Item implements Serializable {
        /**
         * 封面图
         */
        private String cover;

        /**
         * 商品名称
         */
        private String goodsName;

        /**
         * 购买数量
         */
        private int buyCount;

        /**
         * 购买价格
         */
        private String price;

        /**
         * 商品规格
         */
        private String attribute;
    }

}
